When one designs a software application, it is often desired to extract or gather information related to how the application is running. Some currently available data-gathering applications provide data to logs that can be viewed in near real-time or after the program executes, however this type of information gathering and analysis has limitations.
It is generally known that the more information that is gathered from an active executing software application in production the more the active executing software application is affected. Changes in the behavior of an executing software application may be appropriate in a development or test environment; however, changes due to the act of information extraction are rarely acceptable in a production environment where the application is used for its intended purpose. As a result one often minimizes or limits the amount, detail and breadth of information available from an application in production so as to affect the executing software as little a possible even though extracting more information may be preferred. This then relegates the executing software application to that of a black box making it very difficult to accomplish anything close to effective IT operations. In the past attempts have been made to extract and gather information from an executing software application with either little information being available or an unacceptable degradation in performance while executing of the software application. The act of gathering information from an executing software application normally resulted in adding overhead to the application by way of significant interruptions to the normal flow of execution and additional obtrusive software instructions, which in turn changed the way the application behaves. This is what is known as “the collection problem”.
Information extracted from an executing software application has utility in a number of disciplines. Detailed information from a software application executing in production is highly valued to information technology (IT) operations, IT planning, software development activities, and security controls. Despite the overwhelming value and need for detailed application information, the state of the art is such that incomplete information is gathered by sampling predefined points at intervals, or by analyzing information that is indirectly related to an application which infers application behavior.
In most IT operations the information that is required is indeterminate and is therefore not known in advance. In such cases it is required to gather a wide range of data. Such is the case with application details. If it were possible, it would be useful to gather any and all data from any and all applications. With this mind it is necessary to gather a broad range of data in such a way that the application does not change as a result of the extraction of information.